{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "79212453",
   "metadata": {},
   "source": [
    "# 使用AutoGluon对Chronos模型进行微调\n",
    "\n",
    "本notebook展示如何使用AutoGluon的TimeSeriesPredictor模块来预测股票价格，并计算涨跌幅排名。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39185783",
   "metadata": {},
   "source": [
    "## 1. 导入必要的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "15b89f67",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\Python\\Projects\\TeamProjects\\大数据挑战赛\\.venv\\lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CUDA可用，使用GPU进行训练。\n"
     ]
    }
   ],
   "source": [
    "# 导入基础库\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import pickle\n",
    "from datetime import datetime, timedelta\n",
    "\n",
    "plt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n",
    "plt.rcParams[\"axes.unicode_minus\"] = False  # 解决负号显示问题\n",
    "# 导入AutoGluon相关库\n",
    "from autogluon.timeseries import TimeSeriesDataFrame, TimeSeriesPredictor\n",
    "from autogluon.core.utils.loaders import load_pkl\n",
    "from autogluon.core.utils.savers import save_pkl\n",
    "from torch.cuda import is_available as is_cuda_available\n",
    "\n",
    "# 检查CUDA是否可用\n",
    "if is_cuda_available():\n",
    "    print(\"CUDA可用，使用GPU进行训练。\")\n",
    "else:\n",
    "    print(\"CUDA不可用，使用CPU进行训练。\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ca3aa025",
   "metadata": {},
   "source": [
    "## 定义文件路径和配置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c6fe9ac3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 文件路径定义\n",
    "BASE_DIR = \"d:/Python/Projects/TeamProjects/大数据挑战赛\"\n",
    "DATA_DIR = os.path.join(BASE_DIR, \"data\")\n",
    "MODEL_DIR = os.path.join(BASE_DIR, \"model\")\n",
    "RESULT_DIR = os.path.join(BASE_DIR, \"output\")\n",
    "\n",
    "# 确保目录存在\n",
    "os.makedirs(MODEL_DIR, exist_ok=True)\n",
    "os.makedirs(RESULT_DIR, exist_ok=True)\n",
    "\n",
    "# 数据文件路径\n",
    "FEATURE_DATA_PATH = os.path.join(DATA_DIR, \"train.csv\")  # 训练数据路径\n",
    "TEST_DATA_PATH = os.path.join(DATA_DIR, \"test.csv\")  # 测试数据路径\n",
    "RESULT_PATH = os.path.join(RESULT_DIR, \"result.csv\")  # 结果保存路径\n",
    "MODEL_PATH = os.path.join(MODEL_DIR, \"chronos_model\")  # 模型保存路径\n",
    "\n",
    "# 预测参数设置\n",
    "PREDICTION_LENGTH = 1  # 预测未来1天\n",
    "CONTEXT_LENGTH = 400  # 使用过去32天数据进行预测，与原始代码保持一致"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ad620cc",
   "metadata": {},
   "source": [
    "## 数据处理函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f32a6a08",
   "metadata": {},
   "outputs": [],
   "source": [
    "def inputdata(path):\n",
    "    \"\"\"\n",
    "    读取CSV数据文件\n",
    "\n",
    "    Args:\n",
    "        path (str): CSV文件路径\n",
    "\n",
    "    Returns:\n",
    "        pd.DataFrame: 读取的数据框\n",
    "    \"\"\"\n",
    "    data = pd.read_csv(path, header=0, sep=\",\", encoding=\"utf-8\")\n",
    "    return data\n",
    "\n",
    "\n",
    "def outputdata(path, data, is_index=False):\n",
    "    \"\"\"\n",
    "    输出数据到CSV文件\n",
    "\n",
    "    Args:\n",
    "        path (str): 输出文件路径\n",
    "        data (pd.DataFrame): 要输出的数据框\n",
    "        is_index (bool): 是否包含索引列\n",
    "    \"\"\"\n",
    "    data.to_csv(path, index=is_index, header=True, sep=\",\", mode=\"w\", encoding=\"utf-8\")\n",
    "\n",
    "\n",
    "def transcolname(df, column_mapping):\n",
    "    \"\"\"\n",
    "    转换列名为英文\n",
    "\n",
    "    Args:\n",
    "        df (pd.DataFrame): 输入数据框\n",
    "        column_mapping (dict): 列名映射字典\n",
    "\n",
    "    Returns:\n",
    "        pd.DataFrame: 列名转换后的数据框\n",
    "    \"\"\"\n",
    "    df.rename(columns=column_mapping, inplace=True)\n",
    "    return df\n",
    "\n",
    "\n",
    "def process_training_data(data):\n",
    "    \"\"\"\n",
    "    处理训练数据，转换为AutoGluon TimeSeriesDataFrame格式\n",
    "\n",
    "    Args:\n",
    "        data (pd.DataFrame): 原始训练数据\n",
    "\n",
    "    Returns:\n",
    "        TimeSeriesDataFrame: 处理后的时间序列数据框\n",
    "    \"\"\"\n",
    "    # 复制数据以避免修改原始数据\n",
    "    data = data.copy()\n",
    "\n",
    "    # 检查是否需要进行中文列名转换\n",
    "    if \"股票代码\" in data.columns:\n",
    "        column_mapping = {\n",
    "            \"股票代码\": \"StockCode\",\n",
    "            \"日期\": \"Date\",\n",
    "            \"开盘\": \"Open\",\n",
    "            \"收盘\": \"Close\",\n",
    "            \"最高\": \"High\",\n",
    "            \"最低\": \"Low\",\n",
    "            \"成交量\": \"Volume\",\n",
    "            \"成交额\": \"Turnover\",\n",
    "            \"振幅\": \"Amplitude\",\n",
    "            \"涨跌额\": \"PriceChange\",\n",
    "            \"换手率\": \"TurnoverRate\",\n",
    "            \"涨跌幅\": \"PriceChangePercentage\",\n",
    "        }\n",
    "        data = transcolname(data, column_mapping)\n",
    "\n",
    "    # 确保日期列是datetime类型\n",
    "    if \"Date\" in data.columns and not pd.api.types.is_datetime64_any_dtype(\n",
    "        data[\"Date\"]\n",
    "    ):\n",
    "        data[\"Date\"] = pd.to_datetime(data[\"Date\"])\n",
    "\n",
    "    # 准备AutoGluon时间序列数据框\n",
    "    # 需要的列: item_id(股票代码), timestamp(日期), target(收盘价)\n",
    "    ts_data = data[[\"StockCode\", \"Date\", \"Close\"]].copy()\n",
    "    ts_data.rename(\n",
    "        columns={\"StockCode\": \"item_id\", \"Date\": \"timestamp\", \"Close\": \"target\"},\n",
    "        inplace=True,\n",
    "    )\n",
    "\n",
    "    # 添加其他列作为协变量特征\n",
    "    feature_columns = [\n",
    "        \"Open\",\n",
    "        \"High\",\n",
    "        \"Low\",\n",
    "        \"Volume\",\n",
    "        \"Turnover\",\n",
    "        \"Amplitude\",\n",
    "        \"PriceChange\",\n",
    "        \"TurnoverRate\",\n",
    "    ]\n",
    "    for col in feature_columns:\n",
    "        if col in data.columns:\n",
    "            ts_data[col] = data[col]\n",
    "\n",
    "    # 转换为TimeSeriesDataFrame\n",
    "    ts_dataframe = TimeSeriesDataFrame(ts_data)\n",
    "\n",
    "    return ts_dataframe\n",
    "\n",
    "\n",
    "def process_test_data(data):\n",
    "    \"\"\"\n",
    "    处理测试数据，转换为AutoGluon TimeSeriesDataFrame格式\n",
    "\n",
    "    Args:\n",
    "        data (pd.DataFrame): 原始测试数据\n",
    "\n",
    "    Returns:\n",
    "        TimeSeriesDataFrame: 处理后的时间序列数据框\n",
    "    \"\"\"\n",
    "    # 复制数据以避免修改原始数据\n",
    "    data = data.copy()\n",
    "\n",
    "    # 检查是否需要进行中文列名转换\n",
    "    if \"股票代码\" in data.columns:\n",
    "        column_mapping = {\n",
    "            \"股票代码\": \"StockCode\",\n",
    "            \"日期\": \"Date\",\n",
    "            \"开盘\": \"Open\",\n",
    "            \"收盘\": \"Close\",\n",
    "            \"最高\": \"High\",\n",
    "            \"最低\": \"Low\",\n",
    "            \"成交量\": \"Volume\",\n",
    "            \"成交额\": \"Turnover\",\n",
    "            \"振幅\": \"Amplitude\",\n",
    "            \"涨跌额\": \"PriceChange\",\n",
    "            \"换手率\": \"TurnoverRate\",\n",
    "            \"涨跌幅\": \"PriceChangePercentage\",\n",
    "        }\n",
    "        data = transcolname(data, column_mapping)\n",
    "\n",
    "    # 确保日期列是datetime类型\n",
    "    if \"Date\" in data.columns and not pd.api.types.is_datetime64_any_dtype(\n",
    "        data[\"Date\"]\n",
    "    ):\n",
    "        data[\"Date\"] = pd.to_datetime(data[\"Date\"])\n",
    "\n",
    "    # 准备测试数据\n",
    "    ts_data = data[[\"StockCode\", \"Date\", \"Close\"]].copy()\n",
    "    ts_data.rename(\n",
    "        columns={\"StockCode\": \"item_id\", \"Date\": \"timestamp\", \"Close\": \"target\"},\n",
    "        inplace=True,\n",
    "    )\n",
    "\n",
    "    # 添加其他列作为协变量特征\n",
    "    feature_columns = [\n",
    "        \"Open\",\n",
    "        \"High\",\n",
    "        \"Low\",\n",
    "        \"Volume\",\n",
    "        \"Turnover\",\n",
    "        \"Amplitude\",\n",
    "        \"PriceChange\",\n",
    "        \"TurnoverRate\",\n",
    "    ]\n",
    "    for col in feature_columns:\n",
    "        if col in data.columns:\n",
    "            ts_data[col] = data[col]\n",
    "\n",
    "    # 转换为TimeSeriesDataFrame\n",
    "    ts_dataframe = TimeSeriesDataFrame(ts_data)\n",
    "\n",
    "    return ts_dataframe"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "416baea5",
   "metadata": {},
   "source": [
    "## 数据加载与预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e63ef3db",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "加载训练数据...\n",
      "训练数据形状: (635729, 12)\n",
      "原始数据列名:\n",
      "['股票代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌额', '换手率', '涨跌幅']\n",
      "\n",
      "数据前5行:\n",
      "     股票代码          日期    开盘    收盘    最高    最低      成交量           成交额    振幅  \\\n",
      "0  600000  2015-04-20  9.47  8.89  9.47  8.68  5724358  1.044673e+10  8.42   \n",
      "1  600000  2015-04-21  8.79  9.07  9.10  8.79  3681947  6.615541e+09  3.49   \n",
      "2  600000  2015-04-22  9.17  9.31  9.35  9.02  4207667  7.712131e+09  3.64   \n",
      "3  600000  2015-04-23  9.31  9.12  9.41  9.04  3635936  6.675542e+09  3.97   \n",
      "4  600000  2015-04-24  8.82  8.74  8.98  8.59  4229271  7.509013e+09  4.28   \n",
      "\n",
      "    涨跌额   换手率   涨跌幅  \n",
      "0 -0.49  3.84 -5.22  \n",
      "1  0.18  2.47  2.02  \n",
      "2  0.24  2.82  2.65  \n",
      "3 -0.19  2.44 -2.04  \n",
      "4 -0.38  2.83 -4.17  \n",
      "\n",
      "转换后的时间序列数据:\n",
      "                    target  Open  High   Low   Volume      Turnover  \\\n",
      "item_id timestamp                                                     \n",
      "600000  2015-04-20    8.89  9.47  9.47  8.68  5724358  1.044673e+10   \n",
      "        2015-04-21    9.07  8.79  9.10  8.79  3681947  6.615541e+09   \n",
      "        2015-04-22    9.31  9.17  9.35  9.02  4207667  7.712131e+09   \n",
      "        2015-04-23    9.12  9.31  9.41  9.04  3635936  6.675542e+09   \n",
      "        2015-04-24    8.74  8.82  8.98  8.59  4229271  7.509013e+09   \n",
      "\n",
      "                    Amplitude  PriceChange  TurnoverRate  \n",
      "item_id timestamp                                         \n",
      "600000  2015-04-20       8.42        -0.49          3.84  \n",
      "        2015-04-21       3.49         0.18          2.47  \n",
      "        2015-04-22       3.64         0.24          2.82  \n",
      "        2015-04-23       3.97        -0.19          2.44  \n",
      "        2015-04-24       4.28        -0.38          2.83  \n",
      "\n",
      "时间序列数据统计信息:\n",
      "              target           Open           High            Low  \\\n",
      "count  635729.000000  635729.000000  635729.000000  635729.000000   \n",
      "mean       33.021957      32.989719      33.692318      32.359242   \n",
      "std        87.437316      87.392609      88.792627      86.093931   \n",
      "min       -48.530000     -50.710000     -36.670000     -51.970000   \n",
      "25%         6.430000       6.420000       6.550000       6.310000   \n",
      "50%        14.250000      14.240000      14.520000      13.990000   \n",
      "75%        30.500000      30.480000      31.120000      29.900000   \n",
      "max      2438.350000    2425.330000    2465.230000    2322.350000   \n",
      "\n",
      "             Volume      Turnover     Amplitude    PriceChange   TurnoverRate  \n",
      "count  6.357290e+05  6.357290e+05  6.357290e+05  635729.000000  635729.000000  \n",
      "mean   4.815190e+05  8.155522e+08  1.694533e+02       0.015395       1.432144  \n",
      "std    1.010166e+06  1.297503e+09  1.318550e+05       2.395306       2.398581  \n",
      "min    5.000000e+00  1.842000e+04 -2.628397e+04    -171.980000       0.000000  \n",
      "25%    8.763900e+04  1.926680e+08  2.110000e+00      -0.190000       0.380000  \n",
      "50%    2.123430e+05  4.092586e+08  3.190000e+00       0.000000       0.750000  \n",
      "75%    4.985680e+05  9.026519e+08  4.920000e+00       0.180000       1.550000  \n",
      "max    5.135466e+07  9.003765e+10  1.051314e+08     161.000000      82.180000  \n"
     ]
    }
   ],
   "source": [
    "# 读取训练数据\n",
    "print(\"加载训练数据...\")\n",
    "train_raw = inputdata(FEATURE_DATA_PATH)\n",
    "print(f\"训练数据形状: {train_raw.shape}\")\n",
    "print(\"原始数据列名:\")\n",
    "print(train_raw.columns.tolist())\n",
    "print(\"\\n数据前5行:\")\n",
    "print(train_raw.head())\n",
    "\n",
    "# 处理训练数据\n",
    "train_ts = process_training_data(train_raw)\n",
    "print(\"\\n转换后的时间序列数据:\")\n",
    "print(train_ts.head())\n",
    "\n",
    "# 查看时间序列数据统计信息\n",
    "print(\"\\n时间序列数据统计信息:\")\n",
    "print(train_ts.describe())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b3bcbb0d",
   "metadata": {},
   "source": [
    "## 使用AutoGluon TimeSeriesPredictor训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d3c1adc2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始训练时间序列模型...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Warning: path already exists! This predictor may overwrite an existing predictor! path=\"d:/Python/Projects/TeamProjects/大数据挑战赛\\model\\chronos_model\"\n",
      "Beginning AutoGluon training...\n",
      "AutoGluon will save models to 'd:\\Python\\Projects\\TeamProjects\\大数据挑战赛\\model\\chronos_model'\n",
      "=================== System Info ===================\n",
      "AutoGluon Version:  1.3.1\n",
      "Python Version:     3.10.16\n",
      "Operating System:   Windows\n",
      "Platform Machine:   AMD64\n",
      "Platform Version:   10.0.26100\n",
      "CPU Count:          20\n",
      "GPU Count:          1\n",
      "Memory Avail:       15.86 GB / 31.73 GB (50.0%)\n",
      "Disk Space Avail:   74.83 GB / 931.50 GB (8.0%)\n",
      "===================================================\n",
      "\n",
      "Fitting with arguments:\n",
      "{'enable_ensemble': True,\n",
      " 'eval_metric': MSE,\n",
      " 'freq': 'D',\n",
      " 'hyperparameters': {'Chronos': [{'batch_size': 32,\n",
      "                                  'context_length': 400,\n",
      "                                  'dropout_rate': 0.1,\n",
      "                                  'fine_tune': True,\n",
      "                                  'hidden_size': 128,\n",
      "                                  'learning_rate': 0.001,\n",
      "                                  'model_path': 'bolt_small',\n",
      "                                  'num_gpus': 1,\n",
      "                                  'num_layers': 2,\n",
      "                                  'prediction_length': 1}]},\n",
      " 'known_covariates_names': [],\n",
      " 'num_val_windows': 1,\n",
      " 'prediction_length': 1,\n",
      " 'quantile_levels': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9],\n",
      " 'random_seed': 123,\n",
      " 'refit_every_n_windows': 1,\n",
      " 'refit_full': False,\n",
      " 'skip_model_selection': False,\n",
      " 'target': 'target',\n",
      " 'verbosity': 2}\n",
      "\n",
      "train_data with frequency 'IRREG' has been resampled to frequency 'D'.\n",
      "Provided train_data has 970583 rows (NaN fraction=34.5%), 300 time series. Median time series length is 3652 (min=620, max=3652). \n",
      "\n",
      "Provided data contains following columns:\n",
      "\ttarget: 'target'\n",
      "\tpast_covariates:\n",
      "\t\tcategorical:        []\n",
      "\t\tcontinuous (float): ['Open', 'High', 'Low', 'Volume', 'Turnover', 'Amplitude', ...]\n",
      "\n",
      "To learn how to fix incorrectly inferred types, please see documentation for TimeSeriesPredictor.fit\n",
      "\n",
      "AutoGluon will gauge predictive performance using evaluation metric: 'MSE'\n",
      "\tThis metric's sign has been flipped to adhere to being higher_is_better. The metric score can be multiplied by -1 to get the metric value.\n",
      "===================================================\n",
      "\n",
      "Starting training. Start time is 2025-06-16 11:30:33\n",
      "Models that will be trained: ['Chronos[bolt_small]']\n",
      "Training timeseries model Chronos[bolt_small]. \n",
      "\tWarning: Exception caused Chronos[bolt_small] to fail during training... Skipping this model.\n",
      "\texpected string or bytes-like object\n",
      "Not fitting ensemble as no models were successfully trained.\n",
      "Training complete. Models trained: []\n",
      "Total runtime: 1.79 s\n",
      "Trainer has no fit models that can predict.\n",
      "Warning: No models were trained during fit. Resulting leaderboard will be empty.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "模型性能摘要:\n"
     ]
    },
    {
     "data": {
      "application/vnd.microsoft.datawrangler.viewer.v0+json": {
       "columns": [
        {
         "name": "index",
         "rawType": "int64",
         "type": "integer"
        },
        {
         "name": "model",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "score_val",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "pred_time_val",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "fit_time_marginal",
         "rawType": "object",
         "type": "string"
        },
        {
         "name": "fit_order",
         "rawType": "object",
         "type": "string"
        }
       ],
       "ref": "9455f60b-667b-42c2-96f6-02527030e514",
       "rows": [],
       "shape": {
        "columns": 5,
        "rows": 0
       }
      },
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>model</th>\n",
       "      <th>score_val</th>\n",
       "      <th>pred_time_val</th>\n",
       "      <th>fit_time_marginal</th>\n",
       "      <th>fit_order</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [model, score_val, pred_time_val, fit_time_marginal, fit_order]\n",
       "Index: []"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 配置预测器参数\n",
    "predictor_config = {\n",
    "    \"prediction_length\": PREDICTION_LENGTH,  # 预测未来1天\n",
    "    \"target\": \"target\",  # 目标列名\n",
    "    \"eval_metric\": \"MSE\",  # 评估指标\n",
    "    \"path\": MODEL_PATH,  # 模型保存路径\n",
    "    \"freq\": \"D\",  # 指定日频数据\n",
    "}\n",
    "\n",
    "# 配置模型参数\n",
    "model_configs = {\n",
    "    # Chronos模型\n",
    "    \"Chronos\": [\n",
    "        {\n",
    "            \"model_path\": \"bolt_small\",\n",
    "            \"fine_tune\": True,\n",
    "            \"context_length\": CONTEXT_LENGTH,  # 使用过去多少天的数据进行预测\n",
    "            \"prediction_length\": PREDICTION_LENGTH,  # 预测未来1天\n",
    "            \"num_layers\": 2,  # 模型层数\n",
    "            \"hidden_size\": 128,  # 隐藏层大小\n",
    "            \"dropout_rate\": 0.1,  # Dropout率\n",
    "            \"learning_rate\": 0.001,  # 学习率\n",
    "            \"batch_size\": 32,  # 批处理大小\n",
    "            \"num_gpus\": 1,\n",
    "        }\n",
    "    ],\n",
    "}\n",
    "\n",
    "# 创建并训练预测器\n",
    "print(\"开始训练时间序列模型...\")\n",
    "predictor = TimeSeriesPredictor(**predictor_config)\n",
    "predictor.fit(\n",
    "    train_ts,\n",
    "    # time_limit=600,  # 限制训练时间为10分钟\n",
    "    hyperparameters=model_configs,\n",
    "    # presets=\"chronos_base\",\n",
    ")\n",
    "\n",
    "# 显示模型性能摘要\n",
    "print(\"\\n模型性能摘要:\")\n",
    "predictor.leaderboard()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57a8a2d5",
   "metadata": {},
   "source": [
    "## 6. 加载测试数据并进行预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e3fe0f1f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "加载测试数据...\n",
      "测试数据形状: (637229, 12)\n",
      "测试数据列名:\n",
      "['股票代码', '日期', '开盘', '收盘', '最高', '最低', '成交量', '成交额', '振幅', '涨跌额', '换手率', '涨跌幅']\n",
      "\n",
      "测试数据前5行:\n",
      "     股票代码          日期    开盘    收盘    最高    最低      成交量           成交额    振幅  \\\n",
      "0  600000  2015-04-20  9.47  8.89  9.47  8.68  5724358  1.044673e+10  8.42   \n",
      "1  600000  2015-04-21  8.79  9.07  9.10  8.79  3681947  6.615541e+09  3.49   \n",
      "2  600000  2015-04-22  9.17  9.31  9.35  9.02  4207667  7.712131e+09  3.64   \n",
      "3  600000  2015-04-23  9.31  9.12  9.41  9.04  3635936  6.675542e+09  3.97   \n",
      "4  600000  2015-04-24  8.82  8.74  8.98  8.59  4229271  7.509013e+09  4.28   \n",
      "\n",
      "    涨跌额   换手率   涨跌幅  \n",
      "0 -0.49  3.84 -5.22  \n",
      "1  0.18  2.47  2.02  \n",
      "2  0.24  2.82  2.65  \n",
      "3 -0.19  2.44 -2.04  \n",
      "4 -0.38  2.83 -4.17  \n",
      "\n",
      "转换后的测试数据:\n",
      "                    target  Open  High   Low   Volume      Turnover  \\\n",
      "item_id timestamp                                                     \n",
      "600000  2015-04-20    8.89  9.47  9.47  8.68  5724358  1.044673e+10   \n",
      "        2015-04-21    9.07  8.79  9.10  8.79  3681947  6.615541e+09   \n",
      "        2015-04-22    9.31  9.17  9.35  9.02  4207667  7.712131e+09   \n",
      "        2015-04-23    9.12  9.31  9.41  9.04  3635936  6.675542e+09   \n",
      "        2015-04-24    8.74  8.82  8.98  8.59  4229271  7.509013e+09   \n",
      "\n",
      "                    Amplitude  PriceChange  TurnoverRate  \n",
      "item_id timestamp                                         \n",
      "600000  2015-04-20       8.42        -0.49          3.84  \n",
      "        2015-04-21       3.49         0.18          2.47  \n",
      "        2015-04-22       3.64         0.24          2.82  \n",
      "        2015-04-23       3.97        -0.19          2.44  \n",
      "        2015-04-24       4.28        -0.38          2.83  \n",
      "\n",
      "开始预测...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "data with frequency 'IRREG' has been resampled to frequency 'D'.\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "Trainer has no fit models that can predict.",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[6], line 17\u001b[0m\n\u001b[0;32m     15\u001b[0m \u001b[38;5;66;03m# 使用模型进行预测\u001b[39;00m\n\u001b[0;32m     16\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m开始预测...\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m---> 17\u001b[0m predictions \u001b[38;5;241m=\u001b[39m \u001b[43mpredictor\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpredict\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtest_ts\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m     18\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m预测完成!\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m     19\u001b[0m \u001b[38;5;28mprint\u001b[39m(predictions\u001b[38;5;241m.\u001b[39mhead())\n",
      "File \u001b[1;32md:\\Python\\Projects\\TeamProjects\\大数据挑战赛\\.venv\\lib\\site-packages\\autogluon\\timeseries\\predictor.py:859\u001b[0m, in \u001b[0;36mTimeSeriesPredictor.predict\u001b[1;34m(self, data, known_covariates, model, use_cache, random_seed)\u001b[0m\n\u001b[0;32m    857\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m known_covariates \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m    858\u001b[0m     known_covariates \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_to_data_frame(known_covariates)\n\u001b[1;32m--> 859\u001b[0m predictions \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_learner\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpredict\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    860\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    861\u001b[0m \u001b[43m    \u001b[49m\u001b[43mknown_covariates\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mknown_covariates\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    862\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    863\u001b[0m \u001b[43m    \u001b[49m\u001b[43muse_cache\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43muse_cache\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    864\u001b[0m \u001b[43m    \u001b[49m\u001b[43mrandom_seed\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrandom_seed\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    865\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    866\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(TimeSeriesDataFrame, predictions\u001b[38;5;241m.\u001b[39mreindex(original_item_id_order, level\u001b[38;5;241m=\u001b[39mITEMID))\n",
      "File \u001b[1;32md:\\Python\\Projects\\TeamProjects\\大数据挑战赛\\.venv\\lib\\site-packages\\autogluon\\timeseries\\learner.py:174\u001b[0m, in \u001b[0;36mTimeSeriesLearner.predict\u001b[1;34m(self, data, known_covariates, model, use_cache, random_seed, **kwargs)\u001b[0m\n\u001b[0;32m    172\u001b[0m known_covariates \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfeature_generator\u001b[38;5;241m.\u001b[39mtransform_future_known_covariates(known_covariates)\n\u001b[0;32m    173\u001b[0m known_covariates \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_align_covariates_with_forecast_index(known_covariates\u001b[38;5;241m=\u001b[39mknown_covariates, data\u001b[38;5;241m=\u001b[39mdata)\n\u001b[1;32m--> 174\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mload_trainer()\u001b[38;5;241m.\u001b[39mpredict(\n\u001b[0;32m    175\u001b[0m     data\u001b[38;5;241m=\u001b[39mdata,\n\u001b[0;32m    176\u001b[0m     known_covariates\u001b[38;5;241m=\u001b[39mknown_covariates,\n\u001b[0;32m    177\u001b[0m     model\u001b[38;5;241m=\u001b[39mmodel,\n\u001b[0;32m    178\u001b[0m     use_cache\u001b[38;5;241m=\u001b[39muse_cache,\n\u001b[0;32m    179\u001b[0m     random_seed\u001b[38;5;241m=\u001b[39mrandom_seed,\n\u001b[0;32m    180\u001b[0m     \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[0;32m    181\u001b[0m )\n",
      "File \u001b[1;32md:\\Python\\Projects\\TeamProjects\\大数据挑战赛\\.venv\\lib\\site-packages\\autogluon\\timeseries\\trainer.py:778\u001b[0m, in \u001b[0;36mTimeSeriesTrainer.predict\u001b[1;34m(self, data, known_covariates, model, use_cache, random_seed)\u001b[0m\n\u001b[0;32m    770\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mpredict\u001b[39m(\n\u001b[0;32m    771\u001b[0m     \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m    772\u001b[0m     data: TimeSeriesDataFrame,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    776\u001b[0m     random_seed: Optional[\u001b[38;5;28mint\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m    777\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m TimeSeriesDataFrame:\n\u001b[1;32m--> 778\u001b[0m     model_name \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_model_for_prediction\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    779\u001b[0m     model_pred_dict, _ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_model_pred_dict(\n\u001b[0;32m    780\u001b[0m         model_names\u001b[38;5;241m=\u001b[39m[model_name],\n\u001b[0;32m    781\u001b[0m         data\u001b[38;5;241m=\u001b[39mdata,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    784\u001b[0m         random_seed\u001b[38;5;241m=\u001b[39mrandom_seed,\n\u001b[0;32m    785\u001b[0m     )\n\u001b[0;32m    786\u001b[0m     predictions \u001b[38;5;241m=\u001b[39m model_pred_dict[model_name]\n",
      "File \u001b[1;32md:\\Python\\Projects\\TeamProjects\\大数据挑战赛\\.venv\\lib\\site-packages\\autogluon\\timeseries\\trainer.py:754\u001b[0m, in \u001b[0;36mTimeSeriesTrainer._get_model_for_prediction\u001b[1;34m(self, model, verbose)\u001b[0m\n\u001b[0;32m    752\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m model \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m    753\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel_best \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 754\u001b[0m         best_model_name: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_model_best\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    755\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmodel_best \u001b[38;5;241m=\u001b[39m best_model_name\n\u001b[0;32m    756\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m verbose:\n",
      "File \u001b[1;32md:\\Python\\Projects\\TeamProjects\\大数据挑战赛\\.venv\\lib\\site-packages\\autogluon\\timeseries\\trainer.py:214\u001b[0m, in \u001b[0;36mTimeSeriesTrainer.get_model_best\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    212\u001b[0m models \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_model_names()\n\u001b[0;32m    213\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m models:\n\u001b[1;32m--> 214\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTrainer has no fit models that can predict.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m    215\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(models) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m    216\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m models[\u001b[38;5;241m0\u001b[39m]\n",
      "\u001b[1;31mValueError\u001b[0m: Trainer has no fit models that can predict."
     ]
    }
   ],
   "source": [
    "# 读取测试数据\n",
    "print(\"加载测试数据...\")\n",
    "test_raw = inputdata(TEST_DATA_PATH)\n",
    "print(f\"测试数据形状: {test_raw.shape}\")\n",
    "print(\"测试数据列名:\")\n",
    "print(test_raw.columns.tolist())\n",
    "print(\"\\n测试数据前5行:\")\n",
    "print(test_raw.head())\n",
    "\n",
    "# 处理测试数据\n",
    "test_ts = process_test_data(test_raw)\n",
    "print(\"\\n转换后的测试数据:\")\n",
    "print(test_ts.head())\n",
    "\n",
    "# 使用模型进行预测\n",
    "print(\"\\n开始预测...\")\n",
    "predictions = predictor.predict(test_ts)\n",
    "print(\"预测完成!\")\n",
    "print(predictions.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25175f32",
   "metadata": {},
   "source": [
    "## 7. 计算涨跌幅并排名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f9058a3e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "成功预测的股票数量: 300\n",
      "\n",
      "股票涨跌幅排名:\n",
      "1. 股票代码: 300442, 预测涨跌幅: 5.13%\n",
      "2. 股票代码: 300661, 预测涨跌幅: 3.23%\n",
      "3. 股票代码: 2422, 预测涨跌幅: 2.42%\n",
      "4. 股票代码: 600489, 预测涨跌幅: 1.98%\n",
      "5. 股票代码: 600547, 预测涨跌幅: 1.85%\n",
      "6. 股票代码: 975, 预测涨跌幅: 1.83%\n",
      "7. 股票代码: 300782, 预测涨跌幅: 1.83%\n",
      "8. 股票代码: 300413, 预测涨跌幅: 1.81%\n",
      "9. 股票代码: 601100, 预测涨跌幅: 1.74%\n",
      "10. 股票代码: 2812, 预测涨跌幅: 1.65%\n",
      "11. 股票代码: 2, 预测涨跌幅: 1.54%\n",
      "12. 股票代码: 601728, 预测涨跌幅: 1.39%\n",
      "13. 股票代码: 963, 预测涨跌幅: 1.37%\n",
      "14. 股票代码: 300450, 预测涨跌幅: 1.31%\n",
      "15. 股票代码: 300122, 预测涨跌幅: 1.27%\n",
      "16. 股票代码: 568, 预测涨跌幅: 1.18%\n",
      "17. 股票代码: 600011, 预测涨跌幅: 1.10%\n",
      "18. 股票代码: 600048, 预测涨跌幅: 1.05%\n",
      "19. 股票代码: 603501, 预测涨跌幅: 1.01%\n",
      "20. 股票代码: 601138, 预测涨跌幅: 0.98%\n"
     ]
    }
   ],
   "source": [
    "# 获取每支股票最新的实际收盘价\n",
    "latest_prices = {}\n",
    "\n",
    "# 确保测试数据列名转换正确\n",
    "test_data_for_latest = test_raw.copy()\n",
    "if \"股票代码\" in test_data_for_latest.columns:\n",
    "    column_mapping = {\n",
    "        \"股票代码\": \"StockCode\",\n",
    "        \"日期\": \"Date\",\n",
    "        \"收盘\": \"Close\",\n",
    "    }\n",
    "    test_data_for_latest = transcolname(test_data_for_latest, column_mapping)\n",
    "\n",
    "stockcodes = test_data_for_latest[\"StockCode\"].unique()\n",
    "test_data_for_latest[\"Date\"] = pd.to_datetime(test_data_for_latest[\"Date\"])\n",
    "max_date = test_data_for_latest[\"Date\"].max()\n",
    "\n",
    "for stockcode in stockcodes:\n",
    "    # 获取最新日期的收盘价\n",
    "    latest_data = test_data_for_latest[\n",
    "        (test_data_for_latest[\"StockCode\"] == stockcode)\n",
    "        & (test_data_for_latest[\"Date\"] == max_date)\n",
    "    ]\n",
    "    if len(latest_data) > 0:\n",
    "        latest_close = latest_data[\"Close\"].values[0]\n",
    "        latest_prices[stockcode] = latest_close\n",
    "\n",
    "# 计算预测涨跌幅\n",
    "price_change_rates = []\n",
    "\n",
    "# 将预测结果转换为DataFrame以便处理\n",
    "pred_df = predictions.reset_index()\n",
    "\n",
    "# 获取预测的收盘价\n",
    "for stockcode in stockcodes:\n",
    "    # 跳过没有预测结果的股票\n",
    "    if stockcode not in pred_df[\"item_id\"].values:\n",
    "        print(f\"警告: 股票 {stockcode} 没有预测结果\")\n",
    "        continue\n",
    "\n",
    "    # 跳过没有最新价格的股票\n",
    "    if stockcode not in latest_prices:\n",
    "        print(f\"警告: 股票 {stockcode} 没有最新价格数据\")\n",
    "        continue\n",
    "\n",
    "    # 获取该股票的预测值\n",
    "    stock_pred = pred_df[pred_df[\"item_id\"] == stockcode]\n",
    "\n",
    "    # 如果有多个预测时间点，取最远的那个\n",
    "    if len(stock_pred) > 0:\n",
    "        # 获取预测值(mean)\n",
    "        pred_close = stock_pred[\"mean\"].values[-1]\n",
    "\n",
    "        # 获取当前收盘价\n",
    "        current_close = latest_prices[stockcode]\n",
    "\n",
    "        # 计算涨跌幅 (预测价格 - 当前价格) / 当前价格 * 100%\n",
    "        change_rate = (pred_close - current_close) / current_close * 100\n",
    "\n",
    "        # 存储结果\n",
    "        price_change_rates.append((stockcode, change_rate))\n",
    "\n",
    "# 按涨跌幅排序（降序）\n",
    "price_change_rates = sorted(price_change_rates, key=lambda x: x[1], reverse=True)\n",
    "\n",
    "# 显示涨跌幅排名\n",
    "print(f\"成功预测的股票数量: {len(price_change_rates)}\")\n",
    "print(\"\\n股票涨跌幅排名:\")\n",
    "for i, (stockcode, rate) in enumerate(price_change_rates[:20], 1):\n",
    "    print(f\"{i}. 股票代码: {stockcode}, 预测涨跌幅: {rate:.2f}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "921ddce5",
   "metadata": {},
   "source": [
    "## 输出预测结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "490d45cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测结果已保存到: d:/Python/Projects/TeamProjects/大数据挑战赛\\output\\result.csv\n",
      "\n",
      "涨幅最大的10支股票:\n",
      "1. 股票代码: 300442, 预测涨跌幅: 5.13%\n",
      "2. 股票代码: 300661, 预测涨跌幅: 3.23%\n",
      "3. 股票代码: 2422, 预测涨跌幅: 2.42%\n",
      "4. 股票代码: 600489, 预测涨跌幅: 1.98%\n",
      "5. 股票代码: 600547, 预测涨跌幅: 1.85%\n",
      "6. 股票代码: 975, 预测涨跌幅: 1.83%\n",
      "7. 股票代码: 300782, 预测涨跌幅: 1.83%\n",
      "8. 股票代码: 300413, 预测涨跌幅: 1.81%\n",
      "9. 股票代码: 601100, 预测涨跌幅: 1.74%\n",
      "10. 股票代码: 2812, 预测涨跌幅: 1.65%\n",
      "\n",
      "涨幅最小的10支股票:\n",
      "1. 股票代码: 601211, 预测涨跌幅: -3.27%\n",
      "2. 股票代码: 600066, 预测涨跌幅: -3.28%\n",
      "3. 股票代码: 601688, 预测涨跌幅: -3.49%\n",
      "4. 股票代码: 300033, 预测涨跌幅: -4.09%\n",
      "5. 股票代码: 600415, 预测涨跌幅: -4.16%\n",
      "6. 股票代码: 600030, 预测涨跌幅: -4.22%\n",
      "7. 股票代码: 601336, 预测涨跌幅: -4.27%\n",
      "8. 股票代码: 688256, 预测涨跌幅: -4.73%\n",
      "9. 股票代码: 2648, 预测涨跌幅: -6.07%\n",
      "10. 股票代码: 300059, 预测涨跌幅: -6.75%\n"
     ]
    }
   ],
   "source": [
    "# 获取涨幅最大的前10支股票和涨幅最小的后10支股票\n",
    "pred_top_10_max_target = [x[0] for x in price_change_rates[:10]]  # 涨幅最大的10支\n",
    "pred_top_10_min_target = [x[0] for x in price_change_rates[-10:]]  # 涨幅最小的10支\n",
    "\n",
    "# 构建结果数据\n",
    "result_data = {\n",
    "    \"涨幅最大股票代码\": pred_top_10_max_target,\n",
    "    \"涨幅最小股票代码\": pred_top_10_min_target,\n",
    "}\n",
    "\n",
    "# 输出预测结果到CSV文件\n",
    "result_df = pd.DataFrame(result_data)\n",
    "outputdata(RESULT_PATH, result_df)\n",
    "print(f\"预测结果已保存到: {RESULT_PATH}\")\n",
    "\n",
    "# 显示结果\n",
    "print(\"\\n涨幅最大的10支股票:\")\n",
    "for i, code in enumerate(pred_top_10_max_target, 1):\n",
    "    rate = next(r for c, r in price_change_rates if c == code)\n",
    "    print(f\"{i}. 股票代码: {code}, 预测涨跌幅: {rate:.2f}%\")\n",
    "\n",
    "print(\"\\n涨幅最小的10支股票:\")\n",
    "for i, code in enumerate(pred_top_10_min_target, 1):\n",
    "    rate = next(r for c, r in price_change_rates if c == code)\n",
    "    print(f\"{i}. 股票代码: {code}, 预测涨跌幅: {rate:.2f}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a642b6b",
   "metadata": {},
   "source": [
    "## 模型结果可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "08d51931",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "为股票 600000 创建预测可视化\n"
     ]
    },
    {
     "data": {
      "image/png": "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/BG///47TjrpJACKs2nChAmYOHGipTL4Qwh1Rr/Ns88+i/PPPx9vvPGGZ1mXLl3wwgsvoF+/fsjJyQEAT36vtLQ0jZh0/PHH4+eff8bjjz+Ojz/+GMnJyQAUQdLlcqGiokLjgnv77bdRWFiIoUOHepa9/vrrWLFiBVasWIGmTZti0aJFGDJkCL7++mvUr19fU97c3FysWLECCxYswOrVqz2uuDFjxuD9999HeXk5KioqNN+bPHkyRowYAQCoqKhAeno6rrzySgDw/C1XXHEFTj75ZM1vFsy1RAghhJDwQKcUIYQQQgKiuroas2bNwi233IIHH3wQAPD333/jxhtvxA033IAGDRoAAE4//XSUlpaiY8eOuPrqqz3fF6PBHT58GEVFRSgvL4fT6URRURGKi4sBKMJRUVERjh496nHqBML+/ftx//3347bbbkOXLl00637++WeUl5fjiiuu8Cw7//zzsXbtWuzZswdHjx7F77//rlnfrl07dOrUCT/88AMAYMGCBRg+fLjHrZOcnIzzzjsP8+fP96xv166dR5ASxxDr/ZUhFBYuXIjffvsNLpcL//zzDxo3box69eqhsLAQxx9/PFq3bu1xHN14443IyspCSkoK1qxZg6eeegoOhwN5eXl44IEH8NlnnyElJQUOhwOzZ8/G2LFjkZycjCZNmniOV1RUhCeeeAKAGkL4ySefYMyYMZg2bRqaN2+OpKQkfP7553A6nejevTvmzZvn+b7T6URubi7mzJmD//73vx4BTKwbOnQoioqKsHr1ak9ycjkk0e12o2/fvrj33nu9Euvv27fPE64HQCO8EUIIIST6UJQihBBCSEC4XC7ceuutWL16Nb7//nsAirPmnnvu0eRF6t+/Pw4fPoyysjKPmAPAk8+oefPmyMvLw7PPPouZM2ciLy8P3bp1A6C4evLy8nDeeedpvmOVu+++G0VFRSgoKMBVV12FyZMne8Sw3bt3o27duppE2XXr1kWdOnWwefNm7Nu3Dy6XyytJe5s2bbBp0ybPPoJZv3XrVlRXV/stQ7BUV1fjjjvuwFVXXYXi4mLPaHybNm2C2+32uNUETz31FNauXYs1a9YgLS0N7777LjZt2oR33nkH69evx6ZNmzz/evTogccffxzr16/HkiVLPPu44447PGGc1dXVePTRR3HllVfirbfewuDBgz3bZWdn44cffkDXrl0xYMAAPP300wDgEaIyMzMxceJEdOnSBSkpKejbt6/HwZWSkoJ77rkHjz76qMdFJfKYORwOPPnkk5gyZQouuOACzd+XkpKC2rVrB/17EkIIISS8MHyPEEIIIQEhxB2Z5ORk/PXXXxg2bJhHLBB069YNTz31lOdznz59sH37dmRmZnptq6eiogIul8s0l5ERK1aswEcffYTk5GRs27YNpaWlmDZtGr777jt88cUXKCsrQ25urtf3srOzcfDgQeTl5QGA1zZiPQDDfVhZLxxh/soQLMnJyRg7dizOPPNMfPDBB5g2bRoAxckmkrbLHHPMMQCUEfCSk5NxwQUXwOFw4NFHH0VWVhbGjRuHyy67DIAiAjVs2BAdO3b0fP/LL7/E+++/j48//hiXX345nE4n/vrrL3z22WfYvn07rrzySk8ZvvjiC4wZMwZbt27F1KlTMXLkSADAyy+/jFdffRUbN25E165d4Xa7MWLECHTs2FGTo6usrAzt27c3/LvPOecczJs3z2uEPQABXTuEEEIIiSwUpQghhBASENXV1Th06BA2b96sGQEtMzMT3377Le677z4Ainj11FNPoXfv3l776NixI1JTU/0mMC8vL0e3bt3w888/Wy7flClT4Ha7MX36dJx//vkAlPxG//3vfzFv3jykp6drQsQEDocDZWVlnpxD+m3EegCG+7CyHoDnGL7KEAqXXnopAGDEiBG49957sXHjRnz33Xc488wzDbf/448/MGrUKPznP//x5JravHkznnnmGWzbtg3Lli3D6NGj8eeff+KRRx7RfPe8887D1KlTPY62jIwMfPPNNwCUvFxyYnO3242ioiI4HA5cd911nuVGolFmZiYGDBiAOXPmeJaVlZWhcePGpn93jx490LZtWwCqcJqfn486depolhFCCCEkdqAoRQghhJCAOHLkCF577TW89tprmuUvvvgiPvvsM1x66aU49thjsXjxYjz11FOafFIVFRVISkoKWHipqqpCdXW1pSTVGzduRPv27T2CFADcdNNNuOOOOzyOIVlMExw6dAi1atVCw4YNAQC7du1C06ZNPesLCgo8Tp2GDRti165dmu8XFBR4ckw1bNgQGzdu9FoPwHMMX2Wwwl9//QUAuPrqq7Fq1SqsXr1as75du3bo3bs3nn76acyYMQOzZs0y3E+9evVw4YUXesLpAEVUGzduHABFzDnxxBMxatQoTTgeoITHXXPNNTh69KjXfisqKjQiUkpKiif0zh8ff/wxAGD27NmeZfrzoc8zVlVVhRNOOAGvvvqqJ9xz7969nu8EGgJKCCGEkPDDnFKEEEIICYhDhw5h6tSpcLvd2Lp1q2d5o0aNcPHFF+O5554DAEyaNAkjR470hIgBwKhRozx5ggL5l5qailGjRlkqX61atdCmTRvNstTUVCQnJyMtLQ3dunVDaWmpR9QBgHXr1qG0tBRNmzZFbm4uWrZsqcmb5Ha78ddff3kEjm7dumnWA8CyZcs06//44w84nU7N+szMTOTm5votgxUOHjyIY489Fq1atcLEiRNx3HHHeW1z44034v3330ebNm1wxhlnGO5n7969mDx5MrKysgx/++TkZEycOBFXXHEFHA4HJk6caKl8R44c8Qh8wSLC9/bv348dO3bg2GOP9ayrrKzUbDtr1izs3LkTnTt3xt133w2Hw4G9e/eiZcuWuOaaa3DhhReiurra63uEEEIIiR4UpQghhBBimd27d6O0tNQrYbbg6aefxqeffoqxY8fiyy+/xKOPPqpZP3HiRFRWVsLtdqO0tBQHDx70jK53ySWX4IorrvB8rqio8MxXVlZaFkN69eqFtWvXagShX375BZWVlejduzdat26N7t27Y/z48Z71r7zyCvLy8tCjRw8AwIUXXohJkyZ5RgP89NNPsX//fpx99tme9d999x2WL18OANi2bRu+/vprz/rzzjsPR44cweTJkwEoAsqbb76Js846Cw6Hw1IZ/PHoo49i7dq1ePzxx3HqqacahgMKN1fdunU1v4dMZmYmAGDNmjUoLCxEv379MHHiRBQWFuKbb75B69atUVhYiMLCQtStW9dyjqYtW7ZYFtjMyM7ORv369fHRRx+hbdu2nuuuT58+qFu3rmbbyZMnY+TIkWjXrh3uvPNOrFu3Ds2bN8f+/fvRpEkTnH766aioqKAoRQghhMQQDN8jhBBCiGX+/PNPOBwOzyh5eo455hjcfPPNGD9+PG666SYv944IvyssLMTFF1+M/fv349dff/UKWTt8+DBOPvlk9OvXD4888khA4saNN96IF154AZdeeiluvfVW7Nu3Dw888ABOP/10nHLKKQCACRMmYMCAATjzzDM9ubBefPFFT3jZfffdh//973/o1asXTjrpJHz22WcYNmyYRzA699xzccYZZ6B///4YNmwY5s6di4YNG+Kmm24CANSvXx8PP/wwbr/9dixatAgbN27EmjVrMGXKFE85/ZXBH762q6qqwr333otXXnkFTz75JN5++20MHDgQH3zwAVq0aKHZVohZOTk5yM3NRUpKCrKyspCbm4vs7GwkJSV5krIL55Q/CgsL8fPPP3vloAqUp556Clu2bEHv3r3x8MMP45VXXsH+/fsxdepUzd//999/49tvv8Uff/wBQMl79vLLL2PEiBEYO3YsCgoKsGzZMgwZMgTl5eUhlYkQQggh9kGnFCGEEEIsM2PGDJxwwgme5NFFRUUA1CTeX3/9Nd5++2306tUL7777LkaPHo0dO3Z4vl9eXo433ngDXbp0wd69e/H+++97BKnq6mrPdllZWbjzzjvxzTffoF27dnjwwQdNnT56GjRogCVLlsDlcuHiiy/GqFGj0KtXL0yfPt2zzZlnnokff/wR6enpKCgowJQpU3DnnXd61jds2BBLly5F7969sXr1atx555345JNPPOsdDge++eYb3HrrrVi5ciXOOOMM/Pzzz55E4QDw0EMPYcqUKdi1axfq16+PxYsXo1evXpbLECjV1dWorq7G/Pnz0aNHD7z77ruYMWMGHnzwQfz0008oKipC+/btce211+LPP/9EaWkpVq5cie3btwNQ3F6bN29GWVkZDhw44Elk73Q6sXnzZmzevBkulwv79u3DqlWrcOjQIc2xZcaOHYumTZvi1FNPtVT2X375BXPnzvUakfD3339H//79ccYZZ2D06NEYNmwYfvnlF/Tt2xc7d+4EoIRW3nHHHTjllFPQs2dPAEqy+61bt+Kuu+7CJ598goKCAtx9991evxchhBBCooybEEIIIcQC69atc6ekpLife+45t9vtdl9++eXupk2bunNzc90LFixwjxgxwu1wONyPP/642+12u6dNm+bOy8tzOxwO98UXX+x2uVzuI0eOuAcOHOi+//773eXl5W632+3evHmzu2fPnu60tDT3gw8+qDlmSUmJ+95773X/5z//iewfG4cce+yx7gcffNDdo0cPd//+/d1bt27VrK+srHRPmDDB3b17d/eBAwfcS5cudaelpblzcnLceXl57nr16vn9l5OT487MzHQnJye7p02b5tn3/v373QDcmzZtcj/yyCNuh8Ph/v777zXH/+yz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SgEAAADZ1a2bWS5ZEnt/XV38cwmlClv37tLYsWb9tttMsNinj/f44MGNatt2vt56azNJ0muveY/17x889hRQqqiUQkp03wMAAACyq0cPs1y8OPZ+Wyn185979xFKFY+gLnt77RXVeed9oc03j8Y99uyzOWgUUECIGJAS3fcAAACA7EoUStlKqeOOi78Phe/Xv46/z17o//WvG+MeGzQoyw0CCgyhFFKi+x4AAACQXd27m+X338febyulunWT/vpXaZ99YqumUNgeeyz2fGrHHaVzzjFhlA0igZaMUAop0X0PAAAAyC4bUCxbFju4ua2KatVKuvJKafx4qU2bnDcPTRSJSB07ercnTvQGMu/ePb77HtDSEDEgJbrvAQAAANnVpYtZRqPSAw9499uAys7ihuJz/vlmefDBsff7K6UuvDAnzQEKCqEUUiKUAgAAALLLPeY++2xv3a2UQnG64grppZekf/4z9n5/pdR11+WwUUCBqMh3A1D4GFMKAAAAyK3Zs6X27aWpU81tKqWKV2WldNhh8ffbccQkaehQqaoqd20CCgWVUkiJMaUAAACA3Hr3XWn77b3bVEqVnrZtTde+446Tnn02360B8oNKKaRE9z0AAAAg+z78UBo82Kxff33sTHxUSpWmW2/NdwuA/KLuBSkRSgEAAADZt/vu0p//bNanTYt9jB4LAEoRuzak5P4B5I8hAAAAkD0bbxx/X/fuUv/+uW8LAGQbEQNSolIKAAAAyI1OnWJv33qrNH++1K5dXpoDAFlFKIWUCKUAAACA3PCHUh06SBWMBAygRBFKISW67wEAAAC54e++V1WVn3YAQC4QMSAlKqUAAACA3PBXSrVqlZdmAEBOEEohJUIpAAAAIDf8oRSVUgBKGaEUUnJDKbrvAQAAANlD9z0ALUlBRwyXXnqpDj/88Hw3o8VzgygqpQAAAIDs6dgx3y0AgNwp2HkcvvzyS919992aNGlSvpvS4tF9DwAAAMgNf8+ENWvy0w4AyIWCrJRqbGzU6aefrgsuuEBbbLFFvpvT4hFKAQAAAPlRW5vvFgBA9hRkKHXvvffqq6++Ut++ffXiiy+qrq4u301q0QilAAAAgPw44oh8twAAsqfguu+tXr1aV111lbbYYgvNmTNHo0eP1t/+9je9/fbbatOmTcxza2trVetcOqipqZEk1dfXq76+PqftLmXR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iYAciwIF4KWXXored999G26/9dZb0TZt2kSff/756MYbbxz98ccfo9FoNDpx4sToXnvtteF5AwcOjN58883RoK/y6tWro5tvvnn0oYceyv4PAORQ2NvLzTffHB0+fPiG248//nh0jz32yPJPAeROU7aZhx9+OPr8889veM3DDz8c3XbbbaPRaDR66623RrfZZptoY2NjNBqNRv/zn/9Ef/WrX+XopwGyL+xtJtljQLELe3uxvvnmm2inTp2iffv2jY4bNy7rPweQLxX5DsUASTrssMNibk+fPl0DBgzQpEmTNHjwYLVt21aStMMOO2jKlCkbnvfyyy8rEolo+PDhce95zTXXqK6uThUVFRo7dqz2339/lZVRHIjiF/b2st122+m+++7TGWecofbt2+uhhx7SsGHDsv+DADnSlG3md7/7XeBrJGnSpEnab7/9FIlEJEm77babLrvssmz/GEDOhL3NJHsMKHZhby/WH/7wB1122WV69dVXs9h6IP84Q0fBqaur04gRI3TGGWeopqZG/fr12/BYJBJReXn5hu5H7mOuOXPmaOTIkerXr5++/fZbXXrppTrqqKPU2NiYk58ByJUwtpeDDz5Y/fv3V//+/dW9e3etXr2aE2yUrEy2GWv58uUbgltJca/r2LGjFi5cmJsfAMixMLaZdB8Dil1Y28sjjzyi6upqurmiRSCUQsG56qqr1K5dO/3+979XRUWFqqqqYh5v3bq11qxZk/Q9Ro0ape7du+vNN9/U1VdfrbffflsTJkzQG2+8kc2mAzkXxvby7LPPau7cuZoyZYqWLFmi7bbbTr/+9a+z2Wwgb5qyzZx99tnac889dfDBB0tS3OvS2c6AYhXGNpPuY0CxC2N7Wbp0qS6//HI9/PDDKi8vz1nbgXyh+x4KyltvvaW77rpLH374oSorK9W5c+e4wf1WrVqlVq1aJX2f+fPna+jQoWrdurUkqUOHDhowYIBmzpypAw44IGvtB3IprO3liSee0Jlnnqltt91WknTbbbepU6dOWrlypTp16pSt5gM515RtZtSoURo3bpwmTZq04b7OnTtr6dKlCV8DlIqwtpl0HgOKXVjby/nnn69TTz1VO+64Y87aDuQTlVIoGLNnz9aJJ56ou+66SwMHDpQk7brrrvrggw9inlNbWxs4pb1r00031dq1azfcbmxs1Pz589W7d+/sNB7IsTC3l8bGRi1ZsmTD7cWLF0uSGhoastByID+ass18+umnOvfcc/Wvf/1L3bt33/A8/+u++OIL/r6g5IS5zaR6DCh2YW4vTz75pO644w516tRJnTp10oQJE3TYYYfphhtuyO0PBeQIoRQKwtq1a3XYYYfpyCOP1NFHH63Vq1dr9erVGjJkiGpqavTII49Ikq677joNHTo0ZSnrscceqxdffFHPPfec5s+fr8svv1z19fUaOnRoLn4cIKvC3l6GDBmi+++/X/fee69GjRqlE044QXvuuae6dOmSix8HyLqmbDNLlizR4YcfrksuuUS77LLLhtdI0hFHHKH33ntPb7zxhurr63XTTTfpwAMPzOePCIQq7G0m2WNAsQt7e5k9e7a+/PJLTZw4URMnTtQuu+yiBx98kHHYULryPf0fEI2a6bQlxf2bPXt29IUXXoi2bds22qVLl+gmm2wSnTx5csxrZ8+eHTfFfTQajb7wwgvRHXbYIdq6devooEGDou+//36ufhwgq8LeXtatWxc977zzor169Yq2atUqus8++0S//fbbXP5IQFY1ZZu57bbbAl9j3XPPPdHKysroxhtvHO3Xr1908eLF+frxgNCFvc2k2p6AYpaNvzGuffbZJzpu3Lgc/kRAbkWi0Wg0C1kXEKrFixfrs88+0+DBg6neAFJgewEy09RtZvbs2Zo2bZqGDBmi9u3bZ7GFQGHh7wyQPrYXIDlCKQAAAAAAAOQcY0oBAAAAAAAg5wilAAAAAAAAkHOEUgAAAAAAAMg5QikAAAAAAADkHKEUAAAAAAAAco5QCgAAAAAAADlHKAUAAJADL774oiKRiCoqKgL/lZWV6dRTT93w/EWLFqmiomLD7VNPPVVXXHGFJGnAgAHq16+fBg0apE033VT77bdfzn8eAACA5qpI/RQAAAA0V3l5uTbffHN99913gY+fcsopG0Kor776Sr/4xS/U2NioQYMGSTIhVVlZmTbffHO1atVK99xzj4YOHapHH31UTz31VK5+DAAAgNBQKQUAAJAD5eXlKZ9jQ6nttttOH3zwgdq2bauvv/5aX3/9tU488USdddZZOvXUU+PeK533BgAAKDRUSgEAAORAJBJJ+RwbLpWVlamiokJr167VLrvsIkmaO3euzjrrLFVUVCgSiejss89Whw4d9MMPP2i77bbLatsBAACygUopAACAHEgnlPI/p02bNvrwww/14Ycf6thjj4153h133KEPP/xQV155ZehtBQAAyAUqpQAAAHIgEolo3rx56tq1a+Djq1ev1hlnnBFz39q1a7XTTjtJMmNKnXvuuZKkhoaGDdVUZWVcYwQAAMWJUAoAACAHIpGI+vTpk3Sgc782bdro66+/liSdc845G+6vq6vTM888o4kTJ+rTTz/NRnMBAACyjlAKAAAgB6LRaNrPqaur0/r16+Meb2ho0Lp167Rq1So999xzG8adGjJkSOjtBQAAyDZCKQAAgBzIJJQaOXKkRo0apS233HJD971oNKp169apU6dOWrx4sebMmaM+ffro0Ucf1bPPPpvNpgMAAGQFgxAAAADkQGNjY8rnNDQ0SJKGDx+ud955R4MGDdKbb76psWPHavDgwfryyy81YMAAbbLJJtp0002z3WQAAICsolIKAAAgBxoaGlIOdP7b3/52w+1zzz1Xbdq0UZcuXRSNRrV48WKddtppmj9/vo455pi0ZvMDAAAoZIRSAAAAOdDQ0JByoHM7jtRzzz2n2bNna/z48ZLMIOkPPfSQ/vznP+uDDz7Qww8/LEn69NNP9eijj6pPnz65+BEAAABCFYmmM8ABAAAAcqq2tlZVVVUx902fPl1ffvmljj32WEnS/Pnz9Y9//EMXXXQRwRQAACg6hFIAAAAAAADIOQY6BwAAAAAAQM4RSgEAAAAAACDnCKUAAAAAAACQc4RSAAAAAAAAyDlCKQAAAAAAAOQcoRQAAAAAAAByjlAKAAAAAAAAOUcoBQAAAAAAgJz7fz4XW8aWp+QSAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 选择一支股票进行可视化\n",
    "if len(stockcodes) > 0:\n",
    "    sample_stock = stockcodes[0]  # 取第一支股票作为示例\n",
    "    print(f\"为股票 {sample_stock} 创建预测可视化\")\n",
    "\n",
    "    try:\n",
    "        # 获取该股票的历史数据\n",
    "        stock_history = train_ts.loc[sample_stock].reset_index()\n",
    "        stock_history[\"timestamp\"] = pd.to_datetime(stock_history[\"timestamp\"])\n",
    "\n",
    "        # 获取该股票的预测数据\n",
    "        stock_pred = predictions.loc[sample_stock].reset_index()\n",
    "        stock_pred[\"timestamp\"] = pd.to_datetime(stock_pred[\"timestamp\"])\n",
    "\n",
    "        # 创建图表\n",
    "        plt.figure(figsize=(12, 6))\n",
    "\n",
    "        # 绘制历史数据\n",
    "        plt.plot(\n",
    "            stock_history[\"timestamp\"],\n",
    "            stock_history[\"target\"],\n",
    "            label=\"历史收盘价\",\n",
    "            color=\"blue\",\n",
    "        )\n",
    "\n",
    "        # 绘制预测数据\n",
    "        plt.plot(\n",
    "            stock_pred[\"timestamp\"],\n",
    "            stock_pred[\"mean\"],\n",
    "            label=\"预测收盘价\",\n",
    "            color=\"red\",\n",
    "            linestyle=\"--\",\n",
    "        )\n",
    "\n",
    "        # 添加预测区间\n",
    "        if \"upper\" in stock_pred.columns and \"lower\" in stock_pred.columns:\n",
    "            plt.fill_between(\n",
    "                stock_pred[\"timestamp\"],\n",
    "                stock_pred[\"lower\"],\n",
    "                stock_pred[\"upper\"],\n",
    "                color=\"red\",\n",
    "                alpha=0.2,\n",
    "                label=\"预测区间\",\n",
    "            )\n",
    "\n",
    "        # 设置图表属性\n",
    "        plt.title(f\"股票 {sample_stock} 收盘价预测\")\n",
    "        plt.xlabel(\"日期\")\n",
    "        plt.ylabel(\"收盘价\")\n",
    "        plt.legend()\n",
    "        plt.grid(True)\n",
    "        plt.tight_layout()\n",
    "\n",
    "        # 显示图表\n",
    "        plt.show()\n",
    "\n",
    "    except Exception as e:\n",
    "        print(f\"可视化时出现错误: {e}\")\n",
    "        print(\"跳过可视化步骤\")\n",
    "else:\n",
    "    print(\"没有可用的股票数据进行可视化\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
